{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {
    "collapsed": true,
    "ExecuteTime": {
     "end_time": "2023-10-05T09:16:39.672903600Z",
     "start_time": "2023-10-05T09:16:38.723649400Z"
    }
   },
   "outputs": [],
   "source": [
    "# -*- coding:utf-8 -*-\n",
    "# Author:凌逆战 | Never\n",
    "# Date: 2023/6/29\n",
    "\"\"\"\n",
    "调用scipy.signal设计滤波器，并画出频率响应曲线\n",
    "\"\"\"\n",
    "from scipy import signal\n",
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "#打印小数点后13位\n",
    "np.set_printoptions(precision=13)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "b [ 0.9862119246271 -1.9724238492542  0.9862119246271]\n",
      "a [ 1.              -1.9722337291953  0.9726139693131]\n",
      "<class 'numpy.ndarray'>\n",
      "sos [[ 0.9862119246271 -1.9724238492542  0.9862119246271  1.\n",
      "  -1.9722337291953  0.9726139693131]]\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\Users\\never\\AppData\\Local\\Temp\\ipykernel_23584\\455527313.py:23: RuntimeWarning: divide by zero encountered in log10\n",
      "  plt.plot(0.5 * fs * w / np.pi, 20*np.log10(h))  # 0.5*fs*w/np.pi 为频率\n",
      "C:\\Users\\never\\AppData\\Local\\Temp\\ipykernel_23584\\455527313.py:23: RuntimeWarning: invalid value encountered in multiply\n",
      "  plt.plot(0.5 * fs * w / np.pi, 20*np.log10(h))  # 0.5*fs*w/np.pi 为频率\n",
      "C:\\Users\\never\\AppData\\Roaming\\Python\\Python310\\site-packages\\matplotlib\\cbook\\__init__.py:1335: ComplexWarning: Casting complex values to real discards the imaginary part\n",
      "  return np.asarray(x, float)\n"
     ]
    },
    {
     "data": {
      "text/plain": "<Figure size 640x480 with 1 Axes>",
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAlIAAAHLCAYAAAADXnZlAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/bCgiHAAAACXBIWXMAAA9hAAAPYQGoP6dpAABoCklEQVR4nO3deXgT5doG8DtJ03Tf6MZSWtoCZS8Ui+xlkR1EEEQUKCIoAh4W+YCjQgE5igfRIyKICqiAuCsiImVREJDVslMBKWsXSulCS9M0me+PktjQtM3aSdL7d129IDPP+84zkyF9mHnzjkQQBAFEREREZDKp2AkQEREROSoWUkRERERmYiFFREREZCYWUkRERERmYiFFREREZCYWUkRERERmYiFFREREZCYWUkRERERmYiFFREREZCYWUkRk0Pr16yGRSHD06FGz+9i+fTtiY2Ph5uYGiUSC3NxcJCYmIiIiQi9OIpEgKSnJsoStwFC+RERVYSFFDkn7S778T3BwMHr06IGff/7Z7H63bdtm8Bd6UVERkpKS8Ouvv5qftJ16//33sX79eqv3e/v2bYwcORLu7u5YuXIlPvvsM3h6ehrV9sCBA0hKSqrRQsaSfImo9nIROwEiSyxatAiNGjWCIAjIzMzE+vXrMWDAAPz4448YNGiQyf1t27YNK1eurFBMFRUVYeHChQCAhIQEK2RuP95//30EBgYiMTHRqv0eOXIEBQUFWLx4MXr37q1b/uGHH0Kj0VTZ9sCBA1i4cCESExPh5+dn1bwqU1m+RERVYSFFDq1///5o37697vWECRMQEhKCzz//3KxCqqYVFhaKdtWjqKgIHh4eNus/KysLACoUQnK53GbbrE5V+1xZvqb2Q8bTaDQoKSmBm5ub2KkQmY239sip+Pn5wd3dHS4u//wf4ddff4VEIqlwWy4tLQ0SiUR3WysxMRErV64EAL1bhmlpaQgKCgIALFy4ULe8/FWr8+fP4/HHH0dAQADc3NzQvn17bNmyRW972tuRv/32G1544QUEBwejQYMGOHnyJCQSiV78sWPHIJFI0K5dO70++vfvjw4dOugte//999GiRQsoFArUq1cPU6ZMqXBLLCEhAS1btsSxY8fQrVs3eHh44N///jciIiJw5swZ/Pbbb7r9evCKm1KpxMyZMxEUFARPT0889thjuHXrVpXvQ0JCAsaNGwcAeOihhyCRSHRXvAyNkSovKSkJs2fPBgA0atRI733Q2rBhA+Li4uDu7o6AgACMGjUK165dM2qfTc23qn6USiUWLFiA6OhoKBQKhIWF4f/+7/+gVCorHMMZM2YgKCgI3t7eGDJkCK5fv17hPKrs2CQlJUEikVRYbspxOHv2LHr06AEPDw/Ur18fb775ZoX+iouLkZSUhCZNmsDNzQ1169bFsGHDcOnSJQiCgIiICDz66KMG2/n6+uK5554zeHy1JBIJpk6dio0bN+rO2e3btwMAbty4gWeeeQYhISFQKBRo0aIF1q5dW6GPFStWoEWLFvDw8IC/vz/at2+PTZs2VThW58+fx8iRI+Hj44M6dergX//6F4qLi/X6Ki0txeLFixEVFQWFQoGIiAj8+9//rvD+RUREYNCgQfj9998RHx8PNzc3REZG4tNPP9WLU6lUWLhwIRo3bgw3NzfUqVMHXbp0QXJysl6cMZ8X5Dh4RYocWl5eHrKzsyEIArKysrBixQrcvXsXTz/9tMl9Pffcc7h58yaSk5Px2Wef6ZYHBQVh1apVmDx5Mh577DEMGzYMANC6dWsAwJkzZ9C5c2fUr18fc+fOhaenJ7788ksMHToU33zzDR577DG97bzwwgsICgrC/PnzUVhYiJYtW8LPzw979+7FkCFDAAD79u2DVCrFiRMnkJ+fDx8fH2g0Ghw4cACTJk3S9ZWUlISFCxeid+/emDx5MlJTU7Fq1SocOXIE+/fv17v6c/v2bfTv3x+jRo3C008/jZCQECQkJGDatGnw8vLCyy+/DAAICQnRy3fatGnw9/fHggULkJaWhnfeeQdTp07FF198UemxfPnll9G0aVOsWbNGd/s1KirKqPdh2LBh+Ouvv/D555/j7bffRmBgoO59AIAlS5bg1VdfxciRI/Hss8/i1q1bWLFiBbp164Y///xT74qSoX02J19D/Wg0GgwZMgS///47Jk2ahGbNmuHUqVN4++238ddff+H777/XtX/22WexYcMGjB49Gp06dcLu3bsxcOBAo45HZUw5Dnfu3EG/fv0wbNgwjBw5El9//TXmzJmDVq1aoX///gAAtVqNQYMGYdeuXRg1ahT+9a9/oaCgAMnJyTh9+jSioqLw9NNP480330ROTg4CAgJ0/f/444/Iz8836t/d7t278eWXX2Lq1KkIDAxEREQEMjMz8fDDD+sKraCgIPz888+YMGEC8vPzMX36dABlt4VffPFFPP7447rC6OTJkzh06BBGjx6tt52RI0ciIiICr7/+Ov744w+8++67uHPnjl7x8+yzz+KTTz7B448/jlmzZuHQoUN4/fXXce7cOXz33Xd6/V28eBGPP/44JkyYgHHjxmHt2rVITExEXFwcWrRoAaDs3+Prr7+OZ599FvHx8cjPz8fRo0dx/PhxPPLIIwBM/7wgByAQOaB169YJACr8KBQKYf369Xqxe/bsEQAIe/bs0Vt++fJlAYCwbt063bIpU6YIhv5Z3Lp1SwAgLFiwoMK6Xr16Ca1atRKKi4t1yzQajdCpUyehcePGFXLu0qWLUFpaqtfHwIEDhfj4eN3rYcOGCcOGDRNkMpnw888/C4IgCMePHxcACD/88IMgCIKQlZUluLq6Cn369BHUarWu7XvvvScAENauXatb1r17dwGAsHr16gr5t2jRQujevXuF5dp8e/fuLWg0Gt3yGTNmCDKZTMjNza3QxlD7I0eO6C0fN26cEB4errfswWP73//+VwAgXL58WS8uLS1NkMlkwpIlS/SWnzp1SnBxcdFbXtU+m5JvZf189tlnglQqFfbt26e3fPXq1QIAYf/+/YIgCEJKSooAQHjhhRf04kaPHl1hvw0dG0EQhAULFuidl+Ych08//VS3TKlUCqGhocLw4cN1y9auXSsAEJYvX15h+9r3PzU1VQAgrFq1Sm/9kCFDhIiICL3zxBAAglQqFc6cOaO3fMKECULdunWF7OxsveWjRo0SfH19haKiIkEQBOHRRx8VWrRoUeU2tMdqyJAhestfeOEFAYBw4sQJQRD+eV+effZZvbiXXnpJACDs3r1btyw8PFwAIOzdu1e3LCsrS1AoFMKsWbN0y9q0aSMMHDiwyvyM/bwgx8Fbe+TQVq5cieTkZCQnJ2PDhg3o0aMHnn32WXz77bc1sv2cnBzs3r0bI0eOREFBAbKzs5GdnY3bt2+jb9++uHDhAm7cuKHXZuLEiZDJZHrLunbtiuPHj6OwsBAA8Pvvv2PAgAGIjY3Fvn37AJRdpZJIJOjSpQsAYOfOnSgpKcH06dMhlUr1+vfx8cFPP/2ktw2FQoHx48ebvI+TJk3Su63UtWtXqNVqXLlyxeS+LPXtt99Co9Fg5MiRumOdnZ2N0NBQNG7cGHv27NGLN3efH2Son6+++grNmjVDTEyMXi49e/YEAF0u27ZtAwC8+OKLeu21V1nMYepx8PLy0rta5Orqivj4ePz999+6Zd988w0CAwMxbdq0CtvTvv9NmjRBhw4dsHHjRt26nJwc/Pzzz3jqqacM3n58UPfu3dG8eXPda0EQ8M0332Dw4MEQBEFvf/r27Yu8vDwcP34cQNmt++vXr+PIkSPVbmfKlCl6r7X7pX0/tH/OnDlTL27WrFkAUOHfT/PmzdG1a1fd66CgIDRt2lTvGPr5+eHMmTO4cOGCwZzM+bwg+8dbe+TQ4uPj9QabP/nkk2jbti2mTp2KQYMGwdXV1abbv3jxIgRBwKuvvopXX33VYExWVhbq16+ve92oUaMKMV27dkVpaSkOHjyIsLAwZGVloWvXrjhz5oxeIdW8eXPdLRVtIdO0aVO9vlxdXREZGVmh0Klfv75Zx6Nhw4Z6r/39/QGU3S6qaRcuXIAgCGjcuLHB9Q8OZDd3nx9kqJ8LFy7g3LlzuluOD9IOXr9y5QqkUmmFW5sPvm+mMPU4NGjQoEKR4+/vj5MnT+peX7p0CU2bNtUbX2jI2LFjMXXqVFy5cgXh4eH46quvoFKpMGbMGKNyf/D8v3XrFnJzc7FmzRqsWbPGYBvtsZwzZw527tyJ+Ph4REdHo0+fPhg9ejQ6d+5coc2DxyYqKgpSqVQ31k77vkRHR+vFhYaGws/Pr8K/nwf/HQBlx7D8v4NFixbh0UcfRZMmTdCyZUv069cPY8aM0Q0DMOfzguwfCylyKlKpFD169MD//vc/XLhwAS1atKj0f8lqtdri7Wm/xv/SSy+hb9++BmMe/KB2d3evENO+fXu4ublh7969aNiwIYKDg9GkSRN07doV77//PpRKJfbt22fR+AlD2zXGg1fPtARBMDsXc2k0GkgkEvz8888G8/Ly8tJ7be4+P8hQPxqNBq1atcLy5csNtgkLCzN5O8aeq6YeB2u+h6NGjcKMGTOwceNG/Pvf/8aGDRvQvn17owvDB4+l9t/Q008/rRvw/yBtIdKsWTOkpqZi69at2L59O7755hu8//77mD9/vm56kspUdmyNuYoGGHcMu3XrhkuXLuGHH37Ajh078NFHH+Htt9/G6tWr8eyzz5r1eUH2j4UUOZ3S0lIAwN27dwH8cwXlwW+yGbo1ZeqHbWRkJICyKwCWzD2kvdWyb98+NGzYUHcLoWvXrlAqldi4cSMyMzPRrVs3XZvw8HAAQGpqqi4PACgpKcHly5eNzsfYXyQ1qbKcoqKiIAgCGjVqhCZNmtRwVhVzOXHiBHr16lXlMQwPD4dGo9Fd8dFKTU2tEOvv729wEtIHz1VbHIeoqCgcOnQIKpWqyikqAgICMHDgQGzcuBFPPfUU9u/fj3feecfs7Wq/yahWq406Zz09PfHEE0/giSeeQElJCYYNG4YlS5Zg3rx5etMoXLhwQe/q18WLF6HRaHTfitS+LxcuXECzZs10cZmZmcjNzdX9+zJVQEAAxo8fj/Hjx+Pu3bvo1q0bkpKS8Oyzz1rt84LsC8dIkVNRqVTYsWMHXF1ddR+O4eHhkMlk2Lt3r17s+++/X6G9dk6nB3+ZaecMenB5cHAwEhIS8MEHHyA9Pb1Cf9VNE1Be165dcejQIezZs0dXSAUGBqJZs2ZYunSpLkard+/ecHV1xbvvvqv3v+KPP/4YeXl5Rn8rzNPT0+4ehVLZ+zBs2DDIZDIsXLiwwtUUQRBw+/btmkoRI0eOxI0bN/Dhhx9WWHfv3j3deDftt+LeffddvRhDxUdUVBTy8vL0brmlp6dX+AaZLY7D8OHDkZ2djffee6/Cuge3MWbMGJw9exazZ8+GTCbDqFGjTN6elkwmw/Dhw/HNN9/g9OnTFdaX/zf04H65urqiefPmEAQBKpVKb512KhOtFStWAPjn/RgwYACAiu+D9gqjOd+qfDA/Ly8vREdH66ZTsObnBdkPXpEih/bzzz/j/PnzAMrGFmzatAkXLlzA3Llz4ePjAwDw9fXFiBEjsGLFCkgkEkRFRWHr1q26cRflxcXFASgbGNy3b1/dLwl3d3c0b94cX3zxBZo0aYKAgAC0bNkSLVu2xMqVK9GlSxe0atUKEydORGRkJDIzM3Hw4EFcv34dJ06cMGpfunbtiiVLluDatWt6BVO3bt3wwQcfICIiAg0aNNAtDwoKwrx587Bw4UL069cPQ4YMQWpqKt5//3089NBDRk8BERcXh1WrVuG1115DdHQ0goODdQOmxaJ9H15++WWMGjUKcrkcgwcPRlRUFF577TXMmzcPaWlpGDp0KLy9vXH58mV89913mDRpEl566aUayXHMmDH48ssv8fzzz2PPnj3o3Lkz1Go1zp8/jy+//BK//PIL2rdvj9jYWDz55JN4//33kZeXh06dOmHXrl24ePFihT5HjRqFOXPm4LHHHsOLL76IoqIirFq1Ck2aNNENuAZgk+MwduxYfPrpp5g5cyYOHz6Mrl27orCwEDt37sQLL7ygN3/UwIEDUadOHXz11Vfo378/goODzT+QAN544w3s2bMHHTp0wMSJE9G8eXPk5OTg+PHj2LlzJ3JycgAAffr0QWhoKDp37oyQkBCcO3cO7733HgYOHAhvb2+9Pi9fvowhQ4agX79+OHjwoG76iTZt2gAA2rRpg3HjxmHNmjXIzc1F9+7dcfjwYXzyyScYOnQoevToYfJ+NG/eHAkJCYiLi0NAQACOHj2Kr7/+GlOnTtXFWOvzguxITX9NkMgaDE1/4ObmJsTGxgqrVq2q8DXsW7duCcOHDxc8PDwEf39/4bnnnhNOnz5dYfqD0tJSYdq0aUJQUJAgkUj0vnJ+4MABIS4uTnB1da3wtfVLly4JY8eOFUJDQwW5XC7Ur19fGDRokPD1119XyPnBr9dr5efnCzKZTPD29tabHmHDhg0CAGHMmDEG27333ntCTEyMIJfLhZCQEGHy5MnCnTt39GK6d+9e6dfGMzIyhIEDBwre3t4CAN1UCJXlW9l0Eg+yZPoDQRCExYsXC/Xr1xekUmmFqRC++eYboUuXLoKnp6fg6ekpxMTECFOmTBFSU1ON2mdT8q2qn5KSEmHp0qVCixYtBIVCIfj7+wtxcXHCwoULhby8PF3cvXv3hBdffFGoU6eO4OnpKQwePFi4du2awf3esWOH0LJlS8HV1VVo2rSpsGHDhgrTH1jjOBh6H4qKioSXX35ZaNSokSCXy4XQ0FDh8ccfFy5dulShvXY6gU2bNhk8NoYAEKZMmWJwXWZmpjBlyhQhLCxMt+1evXoJa9as0cV88MEHQrdu3YQ6deoICoVCiIqKEmbPnq13rLXH6uzZs8Ljjz8ueHt7C/7+/sLUqVOFe/fu6W1TpVIJCxcu1O1vWFiYMG/ePL2pCQShbPoDQ9MadO/eXW/qkNdee02Ij48X/Pz8BHd3dyEmJkZYsmSJUFJSotfOmM8LchwSQRBhxCgREUEikWDBggUGH5Rt72bMmIGPP/4YGRkZdvW4HO0ktbdu3dJN5kpkSxwjRUREJikuLsaGDRswfPhwuyqiiMTAMVJERGSUrKws7Ny5E19//TVu376Nf/3rX2KnRCQ6FlJERGSUs2fP4qmnnkJwcDDeffddxMbGip0Skeg4RoqIiIjITBwjRURERGQmFlJEREREZuIYKSvQaDS4efMmvL297fJxG0RERFSRIAgoKChAvXr1IJWad22JhZQV3Lx506wHlBIREZH4rl27pvfkCFOwkLIC7aMJrl27pnssiT3RPn+uT58+VT6M1N63aVGfhYVAvXpl/Vy5Armfn022aUy8pTFivJ+2wnPT/PamtDE2tro4S9c7Cp6X5rd3tM/M/Px8hIWFVXjEkClYSFmB9naej4+P3RZSHh4e8PHxqdEPBWtv06I+ZbJ/+vHxgdzI98nUbRoTb2mMGO+nrfDcNL+9KW2Mja0uztL1joLnpfntHfUz05JhORxsTkRERGQmFlJEREREZmIhRURERGQmFlJEREREZmIhRURERGQmFlJEREREZmIhRURERGQmFlJEREREZmIhRURERGQmFlJEREREZnLKQmrlypWIiIiAm5sbOnTogMOHD1cZ/9VXXyEmJgZubm5o1aoVtm3bVkOZEhERkSNzukLqiy++wMyZM7FgwQIcP34cbdq0Qd++fZGVlWUw/sCBA3jyyScxYcIE/Pnnnxg6dCiGDh2K06dP13DmRERE5Gic7qHFy5cvx8SJEzF+/HgAwOrVq/HTTz9h7dq1mDt3boX4//3vf+jXrx9mz54NAFi8eDGSk5Px3nvvYfXq1Qa3oVQqoVQqda/z8/MBlD0YUaVSWXuXLKbNqSZzs8U2LepTpYJc91cVYGQfpm7TmHhLY8R4Pw0RBAElagElpRqUlKpRohagLFWjpFQDZanmnz/VGihVZX+WqgWoBQEaTdmfKpUaZ9MlSN/3NwSJFGqNAI0glPsTD7wWoBaga6/RCBAACAIgQIAg3M8N9xfq1uleQq3RID1dih0FKYBECtxvWz5Wu3/l22mXafsXyrXTaATcuiXFN7eOQiI1/f+ngkaD7GzT2hvdRgA0Qlns17eOQiqpPLa6OEvX66clVLleDLrzRxCQnS3FV1lHLXqYrWnbtv42Le3TnPamtjEmXhvTqkMBwup4G4wx9zPTGp+jEkEQ7O9sNlNJSQk8PDzw9ddfY+jQobrl48aNQ25uLn744YcKbRo2bIiZM2di+vTpumULFizA999/jxMnThjcTlJSEhYuXFhh+aZNm+Dh4WHxfpD1yYqLMWjUKADA1s2boXZzEzkj8QkCcE8NFKqAwlLgrkqCu6Vlr++WSnCvFChWA0o1oFRLUKwu91oDqDQ18wuGiAgAXo4tRbC7dfssKirC6NGjkZeXBx8fH7P6cKorUtnZ2VCr1QgJCdFbHhISgvPnzxtsk5GRYTA+IyOj0u3MmzcPM2fO1L3Oz89HWFgY+vTpY/YbYUsqlQrJycl45JFHIJfLq29gp9u0qM/CQt1fe/bsCbmfn022aUy8pTHG5lSq1iAjX4nrd+7h2p17uHanCNfv3MP1O/dwI7cYOYUlKNVY7/9RcpkEChcZXF3u/ymTQuEihavLP3+6SCWQSiWQSSSQSSWQQMCtrEzUqxsKF5ms3DpAej/mnz8B2f310nJ/Su/XcxJA73+0Esn9H0j+eQ1Ao9EgNTUVMU2bQuYig0QXL7nfxz/9QSIpt75iX9pYtVqDs2fPoGWLFpDJZCYfO7VajTNnzqCFCe1NaaPRqHHm9Bm0aFl1rFpddZyl6x/0z9G1HxJJ2X6cPn0aLVu2NOv9NIcttmlpn+a0N7WNMfHamEf79oC/l+FKytzPTO0dJUs4VSFVUxQKBRQKRYXlcrm8xgoVc4iRny22aVaf5eLNaW9qG2PiLY3RrhMEAdfv3MPxq3dw/ModXLx1F9dy7uFm7j2jCiUPVxkCPF3/+fFwhb+nK/zc5fBUuMBL4VL2p5sLvBQyeCpc4OnqAje5DAq5FK6ysh+p1PRfiiqVCtu2bcOAAbE1WuRvKziPAV0jrVrkb8s+jQEPNTSrT5VKhW23TGtvShuVSgXPrNMY0L7q2OriLF3vKFQqFdwzT2FAXFiNnpfW3qalfZrT3tQ2xsRrY/y93K3ymfngMks5VSEVGBgImUyGzMxMveWZmZkIDQ012CY0NNSkeCKxKUs1SCsA1u5PQ8r1fBy7cgdZBUqDsXKZBA38PdDA3x0NAzwQFuCBhgFlr4O8FfD3cIWbvGb+x01E5IycqpBydXVFXFwcdu3apRsjpdFosGvXLkydOtVgm44dO2LXrl16Y6SSk5PRsWPHGsiYqHq37ypx9ErZ1aZjV+7g5I08lJS6AKf/0sW4SCVoUd8XcQ390ayut65oCvFxg8yMK0VERGQcpyqkAGDmzJkYN24c2rdvj/j4eLzzzjsoLCzUfYtv7NixqF+/Pl5//XUAwL/+9S90794db731FgYOHIjNmzfj6NGjWLNmjZi7QbWcIAi4kCfBlM9TsPNcFh68Q+fpIuDh6GC0j6iDuHB/tG7gyytLREQicLpC6oknnsCtW7cwf/58ZGRkIDY2Ftu3b9cNKL969Sqk5b4q3KlTJ2zatAmvvPIK/v3vf6Nx48b4/vvv0bJlS7F2gWqxQmUpvv3zBj7ZfxkXb8kAlM1/1iTEC3HhAYgL90eb+l4488dvGDiwrUOPQyEicgZOV0gBwNSpUyu9lffrr79WWDZixAiMGDHCxlkRVe7vW3fx6cEr+ObYdRQoSwEArlIBI9o3RGLnRmgc8s/cKSqVCmd5t46IyC44ZSFF5AjUGgF7z2Xik4NXsPevW7rlkYGeeKpDGDyzTmP44Ga86kREZMdYSBHVsNwiFXbflOC/7/yO63fuASibu6ZXTDDGdoxAl+hAqNWl2LaNjykiIrJ3LKSIasitAiXe2pGK7/68AWWpDMA9+LrLMeqhMDz9cDjCAv6ZFV+tFi9PIiIyHgspohpwLj0fE9Yfwc28YgBAfQ8BU/q0wGPtGsLdld+2IyJyVCykiGxs59lMvLj5TxSVqBEZ6InXHm2OrDMHMTCuAeScsoCIyKGxkCKyEUEQ8NG+y/jPz+cgCECnqDpY9VQcPOTAtrNiZ0dERNbAQorIBkpKNXjlh1P44ug1AMDoDg2xcEgLyGVSqFQqkbMjIiJrYSFFZGWFKmD8J8dwOO0OpBLglYHNMb5zBCQSTv5ERORsWEgRWdGlW4VYflqG7OI78FK4YMWTbdEjJljstIiIyEZYSBFZye8XsjF54zEUFEtQ388NaxPj0TTUu/qGRETksFhIEVnBhj+uYMGWM1BrBDTyFvD5cx0Q6u8ldlpERGRjLKSILFCq1mDJtnNYtz8NAPBom7ro6nYNdbwU4iZGREQ1Qip2AkSOqqBYhWc/Paoromb3bYr/Dm8JOf9VERHVGrwiRWSGazlFmPDJEfyVeRducimWj4zFgFZ1ObUBEVEtw0KKyERH03Iw6bNjyCksQbC3Ah+Na4/WDfzETouIiETAQorIBN8ev46535xCiVqDFvV88NG49qjr6y52WkREJBIWUkRG2njoCl7+7jQAoG+LELz9RCw8XPlPiIioNuNvASIjZBUo8Z+fzgEAJnWLxNx+MZBKOVM5EVFtx+8XERnhv7/8hcISNdqE+bGIIiIiHV6RIqrG3/nA92fSIZEAi4a0YBFFREQ6vCJFVAW1RsDXl2UAgCfah6FNmJ+4CRERkV1hIUVUhc1Hr+NGkQQ+bi6Y3bep2OkQEZGdYSFFVImcwhK8vfMCAGB6r2g+9oWIiCpgIUVUiWU7UpF3rxT1PAQ8+VADsdMhIiI7xEKKyIBT1/Pw+eGrAIDHG6nhIuM/FSIiqoi/HYgeoNEImL/lNAQBGNw6FFE+YmdERET2ioUU0QO+/fMG/ryaC09XGeb0bSJ2OkREZMdYSBGVk1+swhs/l81gPq1XY4T4uImcERER2TMWUkTlvJN8Adl3SxAZ6IlnOjcSOx0iIrJzLKSI7vsrswCfHEwDACQNaQFXF/7zICKiqjnNb4q0tDRMmDABjRo1gru7O6KiorBgwQKUlJRU2S4hIQESiUTv5/nnn6+hrMleCIKABT+cgVojoE/zEHRrEiR2SkRE5ACc5ll758+fh0ajwQcffIDo6GicPn0aEydORGFhIZYtW1Zl24kTJ2LRokW61x4eHrZOl+zMtlMZOPj3bShcpHh1UHOx0yEiIgfhNIVUv3790K9fP93ryMhIpKamYtWqVdUWUh4eHggNDbV1imSnikpK8dpPZwEAkxOiEBbAQpqIiIzjNIWUIXl5eQgICKg2buPGjdiwYQNCQ0MxePBgvPrqq1VelVIqlVAqlbrX+fn5AACVSgWVSmV54lamzakmc7PFNi3qU6WCvHw/5fpYsfMC0vOK0cDPDRM6NdTr39RtGhNvaYwY76et8Nw0v70pbYyNrS7O0vWOguel+e0d7TPTGsdbIgiCYHEvdujixYuIi4vDsmXLMHHixErj1qxZg/DwcNSrVw8nT57EnDlzEB8fj2+//bbSNklJSVi4cGGF5Zs2beJtQTslKy7GoFGjAABbN2+G2q1sWoNb94DXT8igFiSY0FSN1gFO+c+BiIgMKCoqwujRo5GXlwcfH/NmX7b7Qmru3LlYunRplTHnzp1DTEyM7vWNGzfQvXt3JCQk4KOPPjJpe7t370avXr1w8eJFREVFGYwxdEUqLCwM2dnZZr8RtqRSqZCcnIxHHnkEcrm8+gZ2uk2L+iwshNzfHwBQlJUFuZ8fAGDiZ8fx61/Z6BpdBx+PbQeJRGLRNo2JtzRGjPfTVnhumt/elDbGxlYXZ+l6R8Hz0vz2jvaZmZ+fj8DAQIsKKbu/tTdr1iwkJiZWGRMZGan7+82bN9GjRw906tQJa9asMXl7HTp0AIAqCymFQgGFQlFhuVwut+sPDzHys8U2zeqzXLy2/a5zmfj1r2zIZRIkPdoSrq6uVtumMfGWxtj7+WaKWn1uWtjelDbGxlYXZ+l6R8Hz0vz2jvKZaY1jbfeFVFBQEIKCjPsq+o0bN9CjRw/ExcVh3bp1kEpNn90hJSUFAFC3bl2T25LjKFapsWhr2QDzZ7o0QlSQl8gZERGRI3KaeaRu3LiBhIQENGzYEMuWLcOtW7eQkZGBjIwMvZiYmBgcPnwYAHDp0iUsXrwYx44dQ1paGrZs2YKxY8eiW7duaN26tVi7QjXgo31/48rtIoT4KDCtZ2Ox0yEiIgdl91ekjJWcnIyLFy/i4sWLaNCggd467TAwlUqF1NRUFBUVAQBcXV2xc+dOvPPOOygsLERYWBiGDx+OV155pcbzp5qTnnsP7+25CAD494Bm8FI4zT8DIiKqYU7zGyQxMbHasVQREREoP7Y+LCwMv/32m40zI3vz1s6LKFZpEB8RgCFt6omdDhEROTCnubVHZKwdZ7MglZQ9T+/Bb+kRERGZgoUU1UpjHg5H83r2N1UFERE5FhZSVOv4ecgx85GmYqdBREROgIUU1QpZBcW6v/+rZxR8PRx/jhsiIhIfCymqFd7ecUH398diOcCciIisg4UUOb1jV3LwfcoN3WuplAPMiYjIOlhIkVNTawTM/+GM2GkQEZGTYiFFTm3zkas4czMf3m5OM2UaERHZERZS5LTuFJbgv7+kAgBe7BktcjZEROSMWEiR01q2IxW5RSrEhHpjVHxDsdMhIiInxEKKnNLZm/nYdPgqgLIZzF1kPNWJiMj6+NuFnNLnh69CEID+LUPxcGQdsdMhIiInxUKKnE6pWoNtp9IBAE88FCZyNkRE5MxYSJHT+ePvHNwuLIG/hxydowPFToeIiJwYCylyOj+euAkA6NeyLuQcG0VERDbE3zLkVEpKNdh+JgMAMLhNXZGzISIiZ8dCipzK/ovZyLunQpC3Ah0acZA5ERHZFgspcira23oDWoZCxmfqERGRjbGQIqdRrFJjx9lMAMDgNvVEzoaIiGoDFlLkNH5NvYW7ylLU9XVDu4b+YqdDRES1AAspchpbT5bd1hvUui6kvK1HREQ1gIUUOYWiklLsOpcFABjUmrf1iIioZrCQIqew61wW7qnUaBjggdYNfMVOh4iIagkWUuQUyt/Wk0h4W4+IiGoGCylyeAXFKuxJvQWAt/WIiKhmsZAih5d8NhMlpRpEBXmiWV1vsdMhIqJahIUUObytJ9MBlF2N4m09IiKqSSykyKHlFpVg719lt/X4bD0iIqppLKTIof1yJgOlGgExod6IDuZtPSIiqlkspMih/Xii7LYeHwlDRERiYCFFDiv7rhIHLmUDKJv2gIiIqKY5VSEVEREBiUSi9/PGG29U2aa4uBhTpkxBnTp14OXlheHDhyMzM7OGMiZL/Hw6AxoBaN3AF+F1PMVOh4iIaiGnKqQAYNGiRUhPT9f9TJs2rcr4GTNm4Mcff8RXX32F3377DTdv3sSwYcNqKFuyxI8n/pmEk4iISAwuYidgbd7e3ggNDTUqNi8vDx9//DE2bdqEnj17AgDWrVuHZs2a4Y8//sDDDz9ssJ1SqYRSqdS9zs/PBwCoVCqoVCoL98D6tDnVZG622Gb5PjPyi3EkLQcA0LdZUPXbUakgL9+PkXmZuh/GxFsaI8b7aSvOeG7WVHtT2hgbW12cpesdBc9L89s72memNY63RBAEweJe7ERERASKi4uhUqnQsGFDjB49GjNmzICLi+F6cffu3ejVqxfu3LkDPz8/3fLw8HBMnz4dM2bMMNguKSkJCxcurLB806ZN8PDwsMq+UNV+TZfguzQZGnkLmN5SXW28rLgYg0aNAgBs3bwZajc3W6dIRER2rqioCKNHj0ZeXh58fHzM6sOprki9+OKLaNeuHQICAnDgwAHMmzcP6enpWL58ucH4jIwMuLq66hVRABASEoKMjIxKtzNv3jzMnDlT9zo/Px9hYWHo06eP2W+ELalUKiQnJ+ORRx6BXC6vvoGdbrN8n+vWHQeQh6e7NcOAhxtW37iwUPfXnj17Qv7Ae27MNo3ZD2PiLY0R4/20FWc8N83p05z2prQxNra6OEvXOwqel+a3d7TPTO0dJUvYfSE1d+5cLF26tMqYc+fOISYmRq+4ad26NVxdXfHcc8/h9ddfh0KhsFpOCoXCYH9yudyuPzzEyM8W28y8W4qUa3mQSIDBbeob13+5GHNyMrWNMfGWxtj7+WYKZzk3Le3T1uemsbHVxVm63lHwvDS/vaN8ZlrjWNt9ITVr1iwkJiZWGRMZGWlweYcOHVBaWoq0tDQ0bdq0wvrQ0FCUlJQgNzdX76pUZmam0eOsqOZtO112tbBDowAE+/AWHRERicfuC6mgoCAEBQWZ1TYlJQVSqRTBwcEG18fFxUEul2PXrl0YPnw4ACA1NRVXr15Fx44dzc6ZbEtbSHESTiIiEpvdF1LGOnjwIA4dOoQePXrA29sbBw8exIwZM/D000/D398fAHDjxg306tULn376KeLj4+Hr64sJEyZg5syZCAgIgI+PD6ZNm4aOHTtW+o09ElfWPeDMzQLIpBL0b8lpD4iISFxOU0gpFAps3rwZSUlJUCqVaNSoEWbMmKE3bkqlUiE1NRVFRUW6ZW+//TakUimGDx8OpVKJvn374v333xdjF8gIf96WAAA6RdVBgKeryNkQEVFt5zSFVLt27fDHH39UGRMREYEHZ3twc3PDypUrsXLlSlumR1byZ3bZHLK8rUdERPbA6WY2J+d1IfMu0u9JIJdJ0Lc5vwxARETiYyFFDuOn+4PMu0YHwtfD8b9aTUREjo+FFDkEQRCw7VRZITWgFa9GERGRfWAhRQ7hzM18XL5dBLlEQK8Y86bDICIisjYWUuQQtp5MBwA09xfgpXCa70gQEZGDYyFFdk8QBGw9eRMA0DbQaZ6xTUREToCFFNm9lGu5uH7nHjxcZWjhx0KKiIjsBwspsnva23o9mwbBVSZyMkREROWwkCK7ptEI+Ol+ITWQ39YjIiI7w0KK7NrRK3eQkV8MbzcXdG0cKHY6REREelhIkV378UTZIPM+zUOhcOHpSkRE9oW/mchulao1+Pl02W29wW3qipwNERFRRSykyG4dupyD7Lsl8PeQo3M0b+sREZH9YSFFdkt7W69fy1DIZTxViYjI/vC3E9mlklINtp8pe7be4Nb1RM6GiIjIMBZSZJf2X8xGbpEKgV4KdIisI3Y6REREBrGQIrv04/1HwgxsFQqZVCJyNkRERIaxkCK7U6xSI/lMJgBgUBve1iMiIvvFQorszm9/3UKBshShPm6Ia+gvdjpERESVYiFFdkf7bL1BretCytt6RERkx1hIkV0pKinFzrO8rUdERI6BhRTZld3ns3BPpUZYgDvaNPAVOx0iIqIqsZAiu7L1hPa2Xj1IJLytR0RE9o2FFNmNgmIVdqdmASgbH0VERGTvWEiR3dh5LhMlpRpEBnmieV0fsdMhIiKqFgspshs/8rYeERE5GBZSZBfyilTYd+EWAGAwb+sREZGDYCFFduGXMxlQqQXEhHqjcYi32OkQEREZxcWYoICAAJM6lUgkOH78OMLDw81Kimof7bP1OMiciIgciVGFVG5uLt555x34+lY/r48gCHjhhRegVqstTo5qh+y7Shy4dBtA2fgoIiIiR2FUIQUAo0aNQnBwsFGx06ZNMzshc/3666/o0aOHwXWHDx/GQw89ZHBdQkICfvvtN71lzz33HFavXm31HMmwn09nQK0R0Kq+LyICPcVOh4iIyGhGFVIajcakTgsKCsxKxhKdOnVCenq63rJXX30Vu3btQvv27atsO3HiRCxatEj32sPDwyY5kmFbT5Td1hvchrf1iIjIsRh9Rcreubq6IjQ0VPdapVLhhx9+wLRp06r9Kr2Hh4deW6o5mfnFOJyWAwAYyNt6RETkYEwupG7fvo06deoAAK5du4YPP/wQ9+7dw5AhQ9C1a1erJ2iuLVu24Pbt2xg/fny1sRs3bsSGDRsQGhqKwYMH49VXX63yqpRSqYRSqdS9zs/PB1BWvKlUKsuTtzJtTjWZm7Hb3JJyHYIAtA3zRbCnS5XxFu2HSgV5+X6M7MPUbRoTb2mMGO+nrdjzuVmTfZrT3pQ2xsZWF2fpekfB89L89o72mWmN4y0RBEEwJvDUqVMYPHgwrl27hsaNG2Pz5s3o168fCgsLIZVKUVhYiK+//hpDhw61OClrGDBgAABg27ZtVcatWbMG4eHhqFevHk6ePIk5c+YgPj4e3377baVtkpKSsHDhwgrLN23axNuCJnr7lAxpdyUYFqFG97pGnYpmkRUXY9CoUQCArZs3Q+3mZrNtERGRYygqKsLo0aORl5cHHx/znqhhdCHVv39/uLi4YO7cufjss8+wdetW9O3bFx9++CGAsgHmx44dwx9//GFWIpWZO3culi5dWmXMuXPnEBMTo3t9/fp1hIeH48svv8Tw4cNN2t7u3bvRq1cvXLx4EVFRUQZjDF2RCgsLQ3Z2ttlvhC2pVCokJyfjkUcegVwur75BDW3zRu49JLy1DxIJsO+lbgjxqbq4sWg/Cgsh9/cHABRlZUHu52dUM1O3aUy8pTFivJ+2Yq/nZk33aU57U9oYG1tdnKXrHQXPS/PbO9pnZn5+PgIDAy0qpIy+tXfkyBHs3r0brVu3Rps2bbBmzRq88MILkErL5vScNm0aHn74YbOSqMqsWbOQmJhYZUxkZKTe63Xr1qFOnToYMmSIydvr0KEDAFRZSCkUCigUigrL5XK5XX94iJFfVdv85exVAECHRgFoUMf4STjN2o9y8ea0N7WNMfGWxtj7+WYKezs3xerT1uemsbHVxVm63lHwvDS/vaN8ZlrjWBtdSOXk5OgGZHt5ecHT0xP+9/+HDwD+/v42+bZeUFAQgoKCjI4XBAHr1q3D2LFjzTpAKSkpAIC6dfkNMlvbevKfZ+sRERE5IpMeEfPgt9/s8cGyu3fvxuXLl/Hss89WWHfjxg3ExMTg8OHDAIBLly5h8eLFOHbsGNLS0rBlyxaMHTsW3bp1Q+vWrWs69VolLbsQp27kQSaVoH9LfmOSiIgck0nf2ktMTNTd0iouLsbzzz8PT8+yCRTLjxkS08cff4xOnTrpjZnSUqlUSE1NRVFREYCyKRN27tyJd955B4WFhQgLC8Pw4cPxyiuv1HTatc7W+4+E6RRVB3W8Kt4mJSIicgRGF1Ljxo3Te/30009XiBk7dqzlGVlo06ZNla6LiIhA+bH1YWFhFWY1p5qhva03mLf1iIjIgRldSK1bt86WeVAtciGzAOczCiCXSdC3BW/rERGR4zJpjBSRNfx4/2pUt8ZB8PVw/G/2EBFR7WXUFalhw4YZ3WFVE1kSCYKge7beID5bj4iIHJxRV6R8fX11Pz4+Pti1axeOHj2qW3/s2DHs2rULvr6+NkuUnMPZ9Hz8nV0IhYsUvZuFiJ0OERGRRYy6IlV+fNScOXMwcuRIrF69GjKZDACgVqvxwgsv2OWs3mRftIPMezQNhrcbb+sREZFjM3mM1Nq1a/HSSy/piigAkMlkmDlzJtauXWvV5Mi5CIKAH+/f1hvcht/WIyIix2dyIVVaWorz589XWH7+/HloNBqrJEXO6cT1PFy/cw8erjL0jAkWOx0iIiKLmTQhJwCMHz8eEyZMwKVLlxAfHw8AOHToEN544w2MHz/e6gmS89BejerVLATurrJqoomIiOyfyYXUsmXLEBoairfeegvp6WXjXerWrYvZs2dj1qxZVk+QnINGI+An3SSc/LYeERE5B5MLKalUiv/7v//D//3f/yE/Px8AOMicqnXs6h1k5BfDW+GC7k2Nfwg1ERGRPTO5kCqPBRQZS3tbr0+LUChceFuPiIicg1GDzdu1a4c7d+4Y3WmXLl1w48YNs5Mi51Kq1mDbqbLbepyEk4iInIlRV6RSUlJw4sQJBAQEGNVpSkoKlEqlRYmR8zh0OQfZd0vg5yFHl+hAsdMhIiKyGqNv7fXq1QuCIBgVK5FIzE6InI92Es7+LUMhl/HxjkRE5DyMKqQuX75scscNGjQwuQ05H0EQ8FtqFgCgb4tQkbMhIiKyLqMKqfDwcFvnQU4q7XYRbuYVw1UmRYdGdcROh4iIyKp4n4Vs6sDfOQCAduF+nISTiIicDgspsqkDl24DAAeZExGRU2IhRTajEcq+sQcAnVhIERGRE2IhRTZzvRDIu1cKb4ULWtf3FTsdIiIiqzOrkMrNzcVHH32EefPmISen7IrD8ePHOQkn6fkrr2wajA6RdeDCaQ+IiMgJmfyImJMnT6J3797w9fVFWloaJk6ciICAAHz77be4evUqPv30U1vkSQ5IW0h1jua39YiIyDmZfJlg5syZSExMxIULF+Dm5qZbPmDAAOzdu9eqyZHjUqrU+Du/rJDiQHMiInJWJhdSR44cwXPPPVdhef369ZGRkWGVpMjx/XktDypBgmBvBaKDvcROh4iIyCZMLqQUCgXy8/MrLP/rr78QFBRklaTI8WmnPXi4UQAfGURERE7L5EJqyJAhWLRoEVQqFYCy5+pdvXoVc+bMwfDhw62eIDkm7UScnaKMe9A1ERGRIzK5kHrrrbdw9+5dBAcH4969e+jevTuio6Ph7e2NJUuW2CJHcjB591Q4dSMPANApigPNiYjIeZn8rT1fX18kJyfj999/x8mTJ3H37l20a9cOvXv3tkV+5IAO/X0bGgEIdhNQ19et+gZEREQOyuRCSqtLly7o0qWLNXMhJ6EdH9XYVxA5EyIiItsyqpB69913je7wxRdfNDsZcg6/X8wGADRlIUVERE7OqELq7bff1nt969YtFBUVwc/PD0DZTOceHh4IDg5mIVXLZeYX42LWXUgkQLQPCykiInJuRg02v3z5su5nyZIliI2Nxblz55CTk4OcnBycO3cO7dq1w+LFi22W6JIlS9CpUyd4eHjoCrgHXb16FQMHDtQVdbNnz0ZpaWmV/ebk5OCpp56Cj48P/Pz8MGHCBNy9e9cGe1A77L9/NapFXR94ykVOhoiIyMZM/tbeq6++ihUrVqBp06a6ZU2bNsXbb7+NV155xarJlVdSUoIRI0Zg8uTJBter1WoMHDgQJSUlOHDgAD755BOsX78e8+fPr7Lfp556CmfOnEFycjK2bt2KvXv3YtKkSbbYhVph/8Wy8VGc9oCIiGoDkwebp6enG7zKo1arkZmZaZWkDFm4cCEAYP369QbX79ixA2fPnsXOnTsREhKC2NhYLF68GHPmzEFSUhJcXV0rtDl37hy2b9+OI0eOoH379gCAFStWYMCAAVi2bBnq1atncFtKpRJKpVL3WjtBqUql0s2vZU+0Odk6N0EQ8PvFWwCA+Ia+KPzbutu0aD9UKsh1f1UBRvZh6jaNibc0pqbez5ogxr7YYpuW9mlOe1PaGBtbXZyl6x0Fz0vz2zvaZ6Y1jrdEEASTBrIMHjwYN27cwEcffYR27doBAI4dO4ZJkyahfv362LJli8VJVWX9+vWYPn06cnNz9ZbPnz8fW7ZsQUpKim7Z5cuXERkZiePHj6Nt27YV+lq7di1mzZqFO3fu6JaVlpbCzc0NX331FR577DGDOSQlJekKu/I2bdoEDw8P83bMCWTeA/6T4gIXiYDXH1LDVSZ2Rv+QFRdj0KhRAICtmzdD7cZpGYiIaruioiKMHj0aeXl58PHxMasPk69IrV27FuPGjUP79u0hl5f9H7+0tBR9+/bFRx99ZFYS1pCRkYGQkBC9ZdrXlT0DMCMjA8HBwXrLXFxcEBAQUOVzA+fNm4eZM2fqXufn5yMsLAx9+vQx+42wJZVKheTkZDzyyCO698wWNh66CqScR/uIAAzsF2v1bVq0H4WFur/27NkT8krG2Vm6TWPiLY2pqfezJoixL7bYpqV9mtPelDbGxlYXZ+l6R8Hz0vz2jvaZaeiRd6YyuZAKCgrCtm3b8Ndff+H8+fMAgJiYGDRp0sTkjc+dOxdLly6tMubcuXOIiYkxuW9bUigUUCgUFZbL5XK7/vCwdX4HL5dd2evaJFi3HVts06w+y8Wb097UNsbEWxpj7+ebKcTYF7s5Ny1sb0obY2Ori7N0vaPgeWl+e0f5zLTGsTZ7Qs4mTZqYVTyVN2vWLCQmJlYZExkZaVRfoaGhOHz4sN4y7Zit0NDQSttkZWXpLSstLUVOTk6lbcgwtUbAwUvageZ8LAwREdUOJhdSzzzzTJXr165da3RfQUFBCAoKMjUFgzp27IglS5YgKytLd7suOTkZPj4+aN68eaVtcnNzcezYMcTFxQEAdu/eDY1Ggw4dOlglr9ri9I085BeXwlvhglb1fSFo1GKnREREZHMmF1LlB2YDZfceT58+jdzcXPTs2dNqiT3o6tWryMnJwdWrV6FWq3WDyqOjo+Hl5YU+ffqgefPmGDNmDN58801kZGTglVdewZQpU3S34Q4fPoyxY8di165dqF+/Ppo1a4Z+/fph4sSJWL16NVQqFaZOnYpRo0ZV+o09Mmz/pbL5ox6OqgMXmRQqFlJERFQLmFxIfffddxWWaTQaTJ48GVFRUVZJypD58+fjk08+0b3Wfgtvz549SEhIgEwmw9atWzF58mR07NgRnp6eGDduHBYtWqRrU1RUhNTUVL2vO27cuBFTp05Fr169IJVKMXz4cJMeiUNltBNxduZtPSIiqkXMHiNVnlQqxcyZM5GQkID/+7//s0aXFaxfv77SOaS0wsPDsW3btkrXJyQk4MHZHgICArBp0yZrpFhrFavUOJpWdqWyS+NAkbMhIiKqOSbPbF6ZS5cuVfs4FnJOx6/cgbJUg2BvBaKCvMROh4iIqMaYfEWq/PxJQNls1unp6fjpp58wbtw4qyVGjuP3+7f1ukQHQiKRiJwNERFRzTG5kPrzzz/1XkulUgQFBeGtt96q9ht95Jz2a6c9iOZtPSIiql1MLqT27NljizzIQeXdU+HU9VwAQOdoDjQnIqLaxeQxUj179qzwnDugbJp1W05/QPbpj79vQyMAkUGeqOvrLnY6RERENcrkQurXX39FSUlJheXFxcXYt2+fVZIix/HPtAe8rUdERLWP0bf2Tp48qfv72bNn9R7qq1arsX37dtSvX9+62ZHd0xVSHB9FRES1kNGFVGxsLCQSCSQSicFbeO7u7lixYoVVkyP7lpFXjEu3CiGVAB0jOT6KiIhqH6MLqcuXL0MQBERGRuLw4cN6z8hzdXVFcHAwZDKZTZIk+6S9GtWqvi98PRz/Se9ERESmMrqQCg8PB1D2OBgi4J/n63HaAyIiqq2MKqS2bNmC/v37Qy6XY8uWLVXGDhkyxCqJkX0TBIEDzYmIqNYzqpAaOnQoMjIyEBwcjKFDh1YaJ5FIoFarrZUb2bFLtwqRma+Eq4sU7SP8xU6HiIhIFEYVUuVv5/HWHgH/jI9qH+4PNznHxhERUe1ktYcWU+3CaQ+IiIiMvCL17rvvGt3hiy++aHYy5BjUGgEH/y57vh4LKSIiqs2MKqTefvttozqTSCQspGqBUzfyUFBcCm83F7Sq7yt2OkRERKIxqpC6fPmyrfMgB6K9rdcxsg5kUonI2RAREYnHojFSgiBAEARr5UIOguOjiIiIyphVSH388cdo2bIl3Nzc4ObmhpYtW+Kjjz6ydm5kh4pVahy9cgcACykiIiKjZzbXmj9/PpYvX45p06ahY8eOAICDBw9ixowZuHr1KhYtWmT1JMl+HE27g5JSDUJ8FIgK8hQ7HSIiIlGZXEitWrUKH374IZ588kndsiFDhqB169aYNm0aCyknp30sTOfoQEgkHB9FRES1m8m39lQqFdq3b19heVxcHEpLS62SFNmvA3wsDBERkY7JhdSYMWOwatWqCsvXrFmDp556yipJkX3KK1Lh5I08ABwfRUREBJhxaw8oG2y+Y8cOPPzwwwCAQ4cO4erVqxg7dixmzpypi1u+fLl1siS7cPDv2xAEICrIE6G+bmKnQ0REJDqTC6nTp0+jXbt2AIBLly4BAAIDAxEYGIjTp0/r4jh+xvlw2gMiIiJ9JhdSe/bssUUe5ADKDzQnIiIiPrSYjJSedw9/3yqEVAI8HFlH7HSIiIjsgslXpIqLi7FixQrs2bMHWVlZ0Gg0euuPHz9uteTIfuy/WPaQ4lYN/ODrLhc5GyIiIvtgciE1YcIE7NixA48//jji4+M5FqqW+GfaA16NIiIi0jK5kNq6dSu2bduGzp072yIfskOCIOD3+4VUF46PIiIi0jF5jFT9+vXh7e1ti1yqtGTJEnTq1AkeHh7w8/OrsP7EiRN48sknERYWBnd3dzRr1gz/+9//qu03IiICEolE7+eNN96wwR44rku37iKrQAmFixTtwv3FToeIiMhumHxF6q233sKcOXOwevVqhIeH2yIng0pKSjBixAh07NgRH3/8cYX1x44dQ3BwMDZs2ICwsDAcOHAAkyZNgkwmw9SpU6vse9GiRZg4caLutRiFoj37/ULZ1aj2Ef5wk8tEzoaIiMh+mFxItW/fHsXFxYiMjISHhwfkcv2Bxzk5OVZLrryFCxcCANavX29w/TPPPKP3OjIyEgcPHsS3335bbSHl7e2N0NBQq+TpjPZfKhtozmkPiIiI9JlcSD355JO4ceMG/vOf/yAkJMSuB5vn5eUhICCg2rg33ngDixcvRsOGDTF69GjMmDEDLi6VHxqlUgmlUql7nZ+fD6DsOYQqlcryxK1Mm5M5uZWqNTh4v5DqEO5ndB+WbNMmfapUkOv+qgJstB/GxFsaY4tjKxYx9sXuzk0z25vSxtjY6uIsXe8oeF6a397RPjOtcbwlgiAIpjTw8PDAwYMH0aZNG4s3bo7169dj+vTpyM3NrTLuwIED6N69O3766Sf06dOn0rjly5ejXbt2CAgIwIEDBzBv3jyMHz++ysfbJCUl6a6Qlbdp0yZ4eHgYvS+OIK0AePu0C9xlAv7zkBpS+62bqyQrLsagUaMAAFs3b4bajY+4ISKq7YqKijB69Gjk5eXBx8fHrD5MviIVExODe/fumbWxB82dOxdLly6tMubcuXOIiYkxqd/Tp0/j0UcfxYIFC6osogDoPRuwdevWcHV1xXPPPYfXX38dCoXCYJt58+bptcvPz0dYWBj69Olj9hthSyqVCsnJyXjkkUcq3Iqtzqrf/gZOX0SXJiEYNDC2RrZpkz4LC3V/7dmzJ+QGvrBgjW0aE29pjC2OrVjE2Be7OzfNbG9KG2Njq4uzdL2j4HlpfntH+8zU3lGyhMmF1BtvvIFZs2ZhyZIlaNWqVYWkTCkkZs2ahcTExCpjIiMjTcrv7Nmz6NWrFyZNmoRXXnnFpLYA0KFDB5SWliItLQ1NmzY1GKNQKAwWWXK53K4/PMzJ7+DfdwAA3ZoEmbVvtjgmZvVZLt6c9qa2MSbe0hh7P99MIca+2M25aWF7U9oYG1tdnKXrHQXPS/PbO8pnpjWOtcmFVL9+/QAAvXr10lsuCAIkEgnUarXRfQUFBSEoKMjUFCp15swZ9OzZE+PGjcOSJUvM6iMlJQVSqRTBwcFWy8tR3StR49iVskKqEweaExERVeAwDy2+evUqcnJycPXqVajVaqSkpAAAoqOj4eXlhdOnT6Nnz57o27cvZs6ciYyMDACATCbTFWuHDx/G2LFjsWvXLtSvXx8HDx7EoUOH0KNHD3h7e+PgwYOYMWMGnn76afj7c76ko1dyUKLWINTHDZGBnmKnQ0REZHdMLqS6d+9e6brTp09blExV5s+fj08++UT3um3btgDKCruEhAR8/fXXuHXrFjZs2IANGzbo4sLDw5GWlgagbFBZamqqbpS+QqHA5s2bkZSUBKVSiUaNGmHGjBl6459qM+3z9TpHB9r1tzOJiIjEYnIh9aCCggJ8/vnn+Oijj3Ds2DGTbu2ZYv369ZXOIQWUfZMuKSmpyj4SEhJQ/kuK7dq1wx9//GGlDJ3Pfu3z9aL5fD0iIiJDTH5EjNbevXsxbtw41K1bF8uWLUPPnj1ZlDiR3KISnL6ZB4ATcRIREVXGpCtSGRkZWL9+PT7++GPk5+dj5MiRUCqV+P7779G8eXNb5Ugi+OPv2xAEIDrYCyE+nHOJiIjIEKOvSA0ePBhNmzbFyZMn8c477+DmzZtYsWKFLXMjEf1+/7ZeF16NIiIiqpTRV6R+/vlnvPjii5g8eTIaN25sy5zIDhy4P9C8UxTHRxEREVXG6CtSv//+OwoKChAXF4cOHTrgvffeQ3Z2ti1zI5HczL2Hv7MLIZUAHSJZSBEREVXG6ELq4Ycfxocffoj09HQ899xz2Lx5M+rVqweNRoPk5GQUFBTYMk+qQdpv67Vu4Adfd8efnZiIiMhWTP7WnqenJ5555hn8/vvvOHXqFGbNmoU33ngDwcHBGDJkiC1ypBrGaQ+IiIiMY/b0BwDQtGlTvPnmm7h+/To+//xza+VEIhIEAfsv/TMRJxEREVXOokJKSyaTYejQodiyZYs1uiMRXcy6i1sFSihcpGjXkI/JISIiqopVCilyHtppD+IbBcBNLhM5GyIiIvvGQor07NdNe8DbekRERNVhIUU6pWoNDv2tHR/FgeZERETVYSFFOidv5KFAWQpfdzla1PMVOx0iIiK7x0KKdPZfKBsf1TGyDmRSicjZEBER2T8WUqSz/9L9+aMac3wUERGRMVhIEQDgXokax6/kAgA68/l6RERERmEhRQCAI2k5KFFrUM/XDY0CPcVOh4iIyCGwkCIA/9zW6xQdCImE46OIiIiMwUKKAPD5ekREROZgIUW4U1iCMzfzAQCdOREnERGR0VhIEQ7+fRuCADQO9kKwj5vY6RARETkMFlJU7rYer0YRERGZgoUU4cAl7WNhWEgRERGZgoVULXcj9x4uZxdCJpWgQ2SA2OkQERE5FBZStZz2tl7rBr7wcZOLnA0REZFjYSFVy+nGR/HbekRERCZjIVWLCYKA/Rc5PoqIiMhcLKRqsb8y7yL7rhJucinahfuJnQ4REZHDYSFVi2lv6z0UEQCFi0zkbIiIiBwPC6la7MAlzh9FRERkCRZStVSpWoM//s4BAHRhIUVERGQWhymklixZgk6dOsHDwwN+fn4GYyQSSYWfzZs3V9lvTk4OnnrqKfj4+MDPzw8TJkzA3bt3bbAH9uXE9TzcVZbCz0OO5nV9xE6HiIjIITlMIVVSUoIRI0Zg8uTJVcatW7cO6enpup+hQ4dWGf/UU0/hzJkzSE5OxtatW7F3715MmjTJipnbJ+34qI6RdSCVSkTOhoiIyDG5iJ2AsRYuXAgAWL9+fZVxfn5+CA0NNarPc+fOYfv27Thy5Ajat28PAFixYgUGDBiAZcuWoV69egbbKZVKKJVK3ev8/HwAgEqlgkqlMmrbNUmbU/ncfr9wCwDwcCN/m+RsaJui9qlSQa77qwowsg9Tt2lMvKUxtji2YhFjX+zu3DSzvSltjI2tLs7S9Y6C56X57R3tM9Max1siCIJgcS81aP369Zg+fTpyc3MrrJNIJKhXrx6USiUiIyPx/PPPY/z48ZBIDF9xWbt2LWbNmoU7d+7olpWWlsLNzQ1fffUVHnvsMYPtkpKSdIVdeZs2bYKHh4d5O1aDlGpg3hEZ1IIEL8eWIthd7IxsT1ZcjEGjRgEAtm7eDLWbm8gZERGR2IqKijB69Gjk5eXBx8e8YS4Oc0XKGIsWLULPnj3h4eGBHTt24IUXXsDdu3fx4osvGozPyMhAcHCw3jIXFxcEBAQgIyOj0u3MmzcPM2fO1L3Oz89HWFgY+vTpY/YbYUsqlQrJycl45JFHIJfLse9CNtSHj6OerxvGDetaaaFpzW2K3mdhoe6vPXv2hLyScXaWbtOYeEtjbHFsxSLGvtjduWlme1PaGBtbXZyl6x0Fz0vz2zvaZ6b2jpIlRC2k5s6di6VLl1YZc+7cOcTExBjV36uvvqr7e9u2bVFYWIj//ve/lRZS5lIoFFAoFBWWy+Vyu/7w0OZ3KC0XQNm0B66urjWyTdH7LBdvTntT2xgTb2mMvZ9vphBjX+zm3LSwvSltjI2tLs7S9Y6C56X57R3lM9Max1rUQmrWrFlITEysMiYyMtLs/jt06IDFixdDqVQaLHxCQ0ORlZWlt6y0tBQ5OTlGj7NyRL/fH2jepTGnPSAiIrKEqIVUUFAQgoKCbNZ/SkoK/P39DRZRANCxY0fk5ubi2LFjiIuLAwDs3r0bGo0GHTp0sFleYsopLMHZ9LJLmR2j6oicDRERkWNzmDFSV69eRU5ODq5evQq1Wo2UlBQAQHR0NLy8vPDjjz8iMzMTDz/8MNzc3JCcnIz//Oc/eOmll3R9HD58GGPHjsWuXbtQv359NGvWDP369cPEiROxevVqqFQqTJ06FaNGjar0G3uO7uCl2xAEoEmIF4K9OeCaiIjIEg5TSM2fPx+ffPKJ7nXbtm0BAHv27EFCQgLkcjlWrlyJGTNmQBAEREdHY/ny5Zg4caKuTVFREVJTU/W+7rhx40ZMnToVvXr1glQqxfDhw/Huu+/W3I7VsP18LAwREZHVOEwhtX79+irnkOrXrx/69etXZR8JCQl4cLaHgIAAbNq0yRopOgTtRJydo1hIERERWcphZjYny93IvYcrt4sgk0rQITJA7HSIiIgcHgupWuTApbKHFLdp4AtvN8f/ajIREZHYWEjVIgcu3QYAdOH4KCIiIqtgIVVLCAJw8O+yK1KdWEgRERFZBQupWiK9CLhdWAI3uRRtG/qJnQ4REZFTYCFVS/yVX/Y8vfhGdaBwkYmcDRERkXNgIVVLpOaWFVKdOZs5ERGR1bCQqgVUag0u3b8ixYk4iYiIrIeFVC1w6kY+lBoJ/D3kaF7XR+x0iIiInAYLqVpg//1pDx5uFACpVCJyNkRERM6DhVQtoJ32oGMUZzMnIiKyJhZSTq6opBQp13IBAJ0iOdCciIjImlhIObnDl3OgUgsIUAhoGOAudjpEREROhYWUk9t/MRsA0NhHgETC8VFERETWxELKye2/WDbQvKmfIHImREREzoeFlBPLKSzB2fR8AGVXpIiIiMi6WEg5sQOXym7rNQ3xgo+ryMkQERE5IRZSTkx7W69jJKc9ICIisgUWUk5MO9C8I5+vR0REZBMspJzUtZwiXM0pgkwqQXyEv9jpEBEROSUWUk5KezUqNswPXgoXkbMhIiJyTiyknJT2+XqdowNFzoSIiMh5sZByQhqNgAP3r0h15vgoIiIim2Eh5YRSMwtwu7AE7nIZ2jbk+CgiIiJbYSHlhLTjo+IbBcDVhW8xERGRrfC3rBPSFlKdo3lbj4iIyJZYSDkZlVqDQ5dzAHCgORERka2xkHIyKddyUVSiRoCnK5qF+oidDhERkVNjIeVkys9mLpVKRM6GiIjIubGQcjIH7j9fr3MUb+sRERHZmsMUUkuWLEGnTp3g4eEBPz+/CuvXr18PiURi8CcrK6vSfiMiIirEv/HGGzbcE9spVJbi+NU7AIAuHB9FRERkcw7z7JCSkhKMGDECHTt2xMcff1xh/RNPPIF+/frpLUtMTERxcTGCg4Or7HvRokWYOHGi7rW3t7d1kq5hh9NyUKoR0MDfHQ3reIidDhERkdNzmEJq4cKFAMquPBni7u4Od3d33etbt25h9+7dBouuB3l7eyM0NNQqeYpp/wXtbOa8GkVERFQTHKaQMtWnn34KDw8PPP7449XGvvHGG1i8eDEaNmyI0aNHY8aMGXBxqfzQKJVKKJVK3ev8/HwAgEqlgkqlsjx5M/1+f6D5w4389PLQ/r0mc7PFNi3qU6WCvHw/RvZh6jaNibc0Roz301Z4bprf3pQ2xsZWF2fpekfB89L89o72mWmN4y0RBEGwuJcatH79ekyfPh25ublVxjVv3hwJCQl4//33q4xbvnw52rVrh4CAABw4cADz5s3D+PHjsXz58krbJCUl6a6Qlbdp0yZ4eIhzS61ABbxytKz4e619Kbzl1TSoZWTFxRg0ahQAYOvmzVC7uYmcERERia2oqAijR49GXl4efHzMmzJI1EJq7ty5WLp0aZUx586dQ0xMjO61MYXUwYMH0alTJxw9ehRxcXEm5bR27Vo899xzuHv3LhQKhcEYQ1ekwsLCkJ2dbfYbYamfTmVg+pcnERPihR+ndtJbp1KpkJycjEceeQRyec1UWLbYpkV9FhZC7l/23MGirCzIDXxhwRrbNCbe0hgx3k9b4blpfntT2hgbW12cpesdBc9L89s72mdmfn4+AgMDLSqkRL21N2vWLCQmJlYZExkZaXK/H330EWJjY00uogCgQ4cOKC0tRVpaGpo2bWowRqFQGCyy5HK5aB8eh9LKvq3XuXFQpTmIkZ8ttmlWn+XizWlvahtj4i2NEfN8s7ZafW5a2N6UNsbGVhdn6XpHwfPS/PaO8plpjWMtaiEVFBSEoKAgq/Z59+5dfPnll3j99dfNap+SkgKpVFrtN/3sjXZ8FKc9ICIiqjkOM9j86tWryMnJwdWrV6FWq5GSkgIAiI6OhpeXly7uiy++QGlpKZ5++ukKfRw+fBhjx47Frl27UL9+fRw8eBCHDh1Cjx494O3tjYMHD2LGjBl4+umn4X//NpAjuHq7CNdy7sFFKkF8owCx0yEiIqo1HKaQmj9/Pj755BPd67Zt2wIA9uzZg4SEBN3yjz/+GMOGDTM4aWdRURFSU1N1o/QVCgU2b96MpKQkKJVKNGrUCDNmzMDMmTNtui/Wtv9S2dWo2DA/eCoc5i0lIiJyeA7zW3f9+vWVziFV3oEDBypdl5CQgPJj69u1a4c//vjDGumJSvt8vc68rUdERFSjHOYRMWSYRiPgwKX7z9djIUVERFSjWEg5uPMZBcgpLIGHqwyxYX5ip0NERFSrsJBycAfuj4+KbxQAVxe+nURERDWJv3kdnHbaAz5fj4iIqOaxkHJgJaUaHL6cA4Djo4iIiMTAQsqBpVzLRVGJGgGerogJ9RY7HSIiolqHhZQD00570CmqDqRSicjZEBER1T4spBwY548iIiISFwspB1WoLEXKtVwAfL4eERGRWFhIOajDl3NQqhEQFuCOsAAPsdMhIiKqlVhIOShOe0BERCQ+FlIOiuOjiIiIxMdCygFl31XifEYBgLJv7BEREZE4WEg5IO1DipvV9UEdL4XI2RAREdVeLKQc0P4L2vFRvBpFREQkJhZSDmj//QcVd27M8VFERERiYiHlYK7eLsL1O/fgIpUgPiJA7HSIiIhqNRZSDkY77UHbhn7wVLiInA0REVHtxkLKwehu63HaAyIiItGxkHIgGo2AA5w/ioiIyG6wkHIg5zLycadIBU9XGWLD/MROh4iIqNZjIeVAtLOZxzcKgFzGt46IiEhs/G3sQPZfLJuIk7f1iIiI7AMLKQdRUqrB4cs5AFhIERER2QsWUg7iz6t3cE+lRh1PVzQN8RY7HSIiIgILKYex//7z9TpFB0IqlYicDREREQEspByGdqA5n69HRERkP1hIOYCCYhVSruUC4PgoIiIie8JCygEcvpwDtUZAwwAPhAV4iJ0OERER3cdCygFw2gMiIiL7xELKARzQPV+P46OIiIjsiUMUUmlpaZgwYQIaNWoEd3d3REVFYcGCBSgpKdGLO3nyJLp27Qo3NzeEhYXhzTffrLbvq1evYuDAgfDw8EBwcDBmz56N0tJSW+2KyW4VKHE+owAA0DGShRQREZE9cRE7AWOcP38eGo0GH3zwAaKjo3H69GlMnDgRhYWFWLZsGQAgPz8fffr0Qe/evbF69WqcOnUKzzzzDPz8/DBp0iSD/arVagwcOBChoaE4cOAA0tPTMXbsWMjlcvznP/+pyV2slPZqVPO6PqjjpRA5GyIiIirPIQqpfv36oV+/frrXkZGRSE1NxapVq3SF1MaNG1FSUoK1a9fC1dUVLVq0QEpKCpYvX15pIbVjxw6cPXsWO3fuREhICGJjY7F48WLMmTMHSUlJcHV1NdhOqVRCqVTqXufn5wMAVCoVVCqVtXYbALDvr1sAgI6R/mb3rW1n7dxqepsW9alSQV6+HyP7MHWbxsRbGiPG+2krPDfNb29KG2Njq4uzdL2j4HlpfntH+8y0xvGWCIIgWNyLCF555RVs374dR48eBQCMHTsW+fn5+P7773Uxe/bsQc+ePZGTkwN/f/8KfcyfPx9btmxBSkqKbtnly5cRGRmJ48ePo23btga3nZSUhIULF1ZYvmnTJnh4WO9bdYIALDwuw50SCZ6PUaOZv0O+VXZBVlyMQaNGAQC2bt4MtZubyBkREZHYioqKMHr0aOTl5cHHx8esPhziitSDLl68iBUrVuiuRgFARkYGGjVqpBcXEhKiW2eokMrIyNDFGGpTmXnz5mHmzJm61/n5+QgLC0OfPn3MfiMMuXK7CHf++B1ymQSTRzwCD1fz3i6VSoXk5GQ88sgjkMvl1TewAlts06I+Cwt1f+3Zsyfkfn422aYx8ZbGiPF+2grPTfPbm9LG2Njq4ixd7yh4Xprf3tE+M7V3lCwhaiE1d+5cLF26tMqYc+fOISYmRvf6xo0b6NevH0aMGIGJEyfaOkWDFAoFFIqK45XkcrlV/9EdupILAGjb0B++nu4W92ft/MTapll9los3p72pbYyJtzRGjPfTVmr1uWlhe1PaGBtbXZyl6x0Fz0vz2zvKZ6Y1jrWohdSsWbOQmJhYZUxkZKTu7zdv3kSPHj3QqVMnrFmzRi8uNDQUmZmZesu0r0NDQw32HRoaisOHD5vUpiYd0M4fFcX5o4iIiOyRqIVUUFAQgoKCjIq9ceMGevTogbi4OKxbtw5Sqf7MDR07dsTLL78MlUqlqzCTk5PRtGlTg7f1tG2WLFmCrKwsBAcH69r4+PigefPmFuyZ5TQagfNHERER2TmHmEfqxo0bSEhIQMOGDbFs2TLcunULGRkZeuOYRo8eDVdXV0yYMAFnzpzBF198gf/97396Y5m+++47vduEffr0QfPmzTFmzBicOHECv/zyC1555RVMmTLF4K27mrY28SHM7tsUbcL8xE6FiIiIDHCIwebJycm4ePEiLl68iAYNGuit037p0NfXFzt27MCUKVMQFxeHwMBAzJ8/X2/qg7y8PKSmpupey2QybN26FZMnT0bHjh3h6emJcePGYdGiRTWzY1WQSiVo29AfbRsavppGRERE4nOIQioxMbHasVQA0Lp1a+zbt8+kfsLDw7Ft2zYLMyQiIqLayCFu7RERERHZIxZSRERERGZiIUVERERkJhZSRERERGZiIUVERERkJhZSRERERGZiIUVERERkJhZSRERERGZiIUVERERkJhZSRERERGZiIUVERERkJhZSRERERGZyiIcW2ztBEAAA+fn5ImdimEqlQlFREfLz8yGXyx12mxb1WVj4Tz/5+ZBLjfs/hKnbNCbe0hgx3k9b4blpfntT2hgbW12cpesdBc9L89s72mem9ve29ve4OVhIWUFBQQEAICwsTORMyCjh4WJnQEREdqSgoAC+vr5mtZUIlpRhBADQaDS4efMmvL29IZFIxE7HoIceeghHjhxx+G1a2qc57U1tY0y8JTH5+fkICwvDtWvX4OPjY3Re9ornpvntTWljbGx1cVWtd6Zzk+el+e0d6TNTEAQUFBSgXr16kBp5p+JBvCJlBVKpFA0aNBA7jSrJZLIa/2CzxTYt7dOc9qa2MSbeGjE+Pj4O/8sK4LlpSXtT2hgbW12cMf04w7nJ89L89o72mWnulSgtDjavJaZMmeIU27S0T3Pam9rGmHhrxTgDnpvmtzeljbGx1cXxvHSsbdr7eWlsvD1/ZvLWHpGDyc/Ph6+vL/Ly8hz+f/3kXHhukj2y9XnJK1JEDkahUGDBggVQKBRip0Kkh+cm2SNbn5e8IkVERERkJl6RIiIiIjITCykiIiIiM7GQIiIiIjITCykiIiIiM7GQIiIiIjITCykiJ3Lt2jUkJCSgefPmaN26Nb766iuxUyJCbm4u2rdvj9jYWLRs2RIffvih2CkR6SkqKkJ4eDheeuklk9ty+gMiJ5Keno7MzEzExsYiIyMDcXFx+Ouvv+Dp6Sl2alSLqdVqKJVKeHh4oLCwEC1btsTRo0dRp04dsVMjAgC8/PLLuHjxIsLCwrBs2TKT2vKKFJETqVu3LmJjYwEAoaGhCAwMRE5OjrhJUa0nk8ng4eEBAFAqlRAEAfw/PNmLCxcu4Pz58+jfv79Z7VlIEdmRvXv3YvDgwahXrx4kEgm+//77CjErV65EREQE3Nzc0KFDBxw+fNhgX8eOHYNarUZYWJiNsyZnZ43zMjc3F23atEGDBg0we/ZsBAYG1lD25MyscW6+9NJLeP31183OgYUUkR0pLCxEmzZtsHLlSoPrv/jiC8ycORMLFizA8ePH0aZNG/Tt2xdZWVl6cTk5ORg7dizWrFlTE2mTk7PGeenn54cTJ07g8uXL2LRpEzIzM2sqfXJilp6bP/zwA5o0aYImTZqYn4RARHYJgPDdd9/pLYuPjxemTJmie61Wq4V69eoJr7/+um5ZcXGx0LVrV+HTTz+tqVSpFjH3vCxv8uTJwldffWXLNKkWMufcnDt3rtCgQQMhPDxcqFOnjuDj4yMsXLjQpO3yihSRgygpKcGxY8fQu3dv3TKpVIrevXvj4MGDAABBEJCYmIiePXtizJgxYqVKtYgx52VmZiYKCgoAAHl5edi7dy+aNm0qSr5Uexhzbr7++uu4du0a0tLSsGzZMkycOBHz5883aTsspIgcRHZ2NtRqNUJCQvSWh4SEICMjAwCwf/9+fPHFF/j+++8RGxuL2NhYnDp1Sox0qZYw5ry8cuUKunbtijZt2qBr166YNm0aWrVqJUa6VIsYc25ag4vVeiIi0XXp0gUajUbsNIj0xMfHIyUlRew0iKqUmJhoVjtekSJyEIGBgZDJZBUG6WZmZiI0NFSkrKi243lJ9qqmzk0WUkQOwtXVFXFxcdi1a5dumUajwa5du9CxY0cRM6PajOcl2auaOjd5a4/Ijty9excXL17Uvb58+TJSUlIQEBCAhg0bYubMmRg3bhzat2+P+Ph4vPPOOygsLMT48eNFzJqcHc9Lsld2cW5a+nVDIrKePXv2CAAq/IwbN04Xs2LFCqFhw4aCq6urEB8fL/zxxx/iJUy1As9Lslf2cG7yWXtEREREZuIYKSIiIiIzsZAiIiIiMhMLKSIiIiIzsZAiIiIiMhMLKSIiIiIzsZAiIiIiMhMLKSIiIiIzsZAiIiIiMhMLKSIiIiIzsZAiIhJZYmIiJBIJJBIJvv/+e6v2/euvv+r6Hjp0qFX7JiIWUkRkA+ULg/I/5R8uSvr69euH9PR09O/fX7esssIqMTHR6KKoU6dOSE9Px8iRI62UKRGV5yJ2AkTknPr164d169bpLQsKCqoQV1JSAldX15pKy24pFAqEhoZavV9XV1eEhobC3d0dSqXS6v0T1Xa8IkVENqEtDMr/yGQyJCQkYOrUqZg+fToCAwPRt29fAMDp06fRv39/eHl5ISQkBGPGjEF2drauv8LCQowdOxZeXl6oW7cu3nrrLSQkJGD69Om6GENXcPz8/LB+/Xrd62vXrmHkyJHw8/NDQEAAHn30UaSlpenWa6/2LFu2DHXr1kWdOnUwZcoUqFQqXYxSqcScOXMQFhYGhUKB6OhofPzxxxAEAdHR0Vi2bJleDikpKTa7IpeWlmbw6l9CQoLVt0VEFbGQIqIa98knn8DV1RX79+/H6tWrkZubi549e6Jt27Y4evQotm/fjszMTL3bUbNnz8Zvv/2GH374ATt27MCvv/6K48ePm7RdlUqFvn37wtvbG/v27cP+/fvh5eWFfv36oaSkRBe3Z88eXLp0CXv27MEnn3yC9evX6xVjY8eOxeeff453330X586dwwcffAAvLy9IJBI888wzFa7ErVu3Dt26dUN0dLR5B6wKYWFhSE9P1/38+eefqFOnDrp162b1bRGRAQIRkZWNGzdOkMlkgqenp+7n8ccfFwRBELp37y60bdtWL37x4sVCnz599JZdu3ZNACCkpqYKBQUFgqurq/Dll1/q1t++fVtwd3cX/vWvf+mWARC+++47vX58fX2FdevWCYIgCJ999pnQtGlTQaPR6NYrlUrB3d1d+OWXX3S5h4eHC6WlpbqYESNGCE888YQgCIKQmpoqABCSk5MN7vuNGzcEmUwmHDp0SBAEQSgpKRECAwOF9evXV3m8Hn300QrLAQhubm56x9HT01NwcXExGH/v3j2hQ4cOwqBBgwS1Wm3UNojIMhwjRUQ20aNHD6xatUr32tPTU/f3uLg4vdgTJ05gz5498PLyqtDPpUuXcO/ePZSUlKBDhw665QEBAWjatKlJOZ04cQIXL16Et7e33vLi4mJcunRJ97pFixaQyWS613Xr1sWpU6cAlN2mk8lk6N69u8Ft1KtXDwMHDsTatWsRHx+PH3/8EUqlEiNGjDApV623334bvXv31ls2Z84cqNXqCrHPPPMMCgoKkJycDKmUNxyIagILKSKyCU9Pz0pvZZUvqgDg7t27GDx4MJYuXVohtm7dukaPLZJIJBAEQW9Z+bFNd+/eRVxcHDZu3FihbfmB8HK5vEK/Go0GAODu7l5tHs8++yzGjBmDt99+G+vWrcMTTzwBDw8Po/bhQaGhoRWOo7e3N3Jzc/WWvfbaa/jll19w+PDhCoUiEdkOCykiEl27du3wzTffICIiAi4uFT+WoqKiIJfLcejQITRs2BAAcOfOHfz11196V4aCgoKQnp6ue33hwgUUFRXpbeeLL75AcHAwfHx8zMq1VatW0Gg0+O233ypcKdIaMGAAPD09sWrVKmzfvh179+41a1vG+uabb7Bo0SL8/PPPiIqKsum2iEgfr/0SkeimTJmCnJwcPPnkkzhy5AguXbqEX375BePHj4darYaXlxcmTJiA2bNnY/fu3Th9+jQSExMr3L7q2bMn3nvvPfz55584evQonn/+eb2rS0899RQCAwPx6KOPYt++fbh8+TJ+/fVXvPjii7h+/bpRuUZERGDcuHF45pln8P333+v6+PLLL3UxMpkMiYmJmDdvHho3boyOHTta50AZcPr0aYwdOxZz5sxBixYtkJGRgYyMDOTk5Nhsm0T0DxZSRCS6evXqYf/+/VCr1ejTpw9atWqF6dOnw8/PT1cs/fe//0XXrl0xePBg9O7dG126dKkw1uqtt95CWFgYunbtitGjR+Oll17Su6Xm4eGBvXv3omHDhhg2bBiaNWuGCRMmoLi42KQrVKtWrcLjjz+OF154ATExMZg4cSIKCwv1YiZMmICSkhKMHz/egiNTvaNHj6KoqAivvfYa6tatq/sZNmyYTbdLRGUkwoMDCoiIHERCQgJiY2PxzjvviJ1KBfv27UOvXr1w7do1hISEVBmbmJiI3Nxcqz8epqa3QVQb8YoUEZEVKZVKXL9+HUlJSRgxYkS1RZTW1q1b4eXlha1bt1o1n3379sHLy8vgAHsishwHmxMRWdHnn3+OCRMmIDY2Fp9++qlRbd5880288sorAMq+pWhN7du3R0pKCgAYnF6CiCzDW3tEREREZuKtPSIiIiIzsZAiIiIiMhMLKSIiIiIzsZAiIiIiMhMLKSIiIiIzsZAiIiIiMhMLKSIiIiIzsZAiIiIiMtP/A25nwKcj5270AAAAAElFTkSuQmCC"
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "fs = 16000\n",
    "fc = 50  # 截止频率\n",
    "\n",
    "# butter\n",
    "b, a = signal.butter(2, fc, btype='highpass', analog=False, output='ba', fs=fs)\n",
    "print(\"b\", b)\n",
    "print(\"a\", a)\n",
    "# b [ 0.98075006 -1.96150012  0.98075006]\n",
    "# a [ 1.         -1.96112953  0.96187072]\n",
    "# ba to sos\n",
    "sos = signal.butter(2, fc, btype='highpass', analog=False, output='sos', fs=fs)\n",
    "print(\"sos\", sos)\n",
    "# cheby1\n",
    "# b,a = signal.cheby1(N=6, rp=30, Wn=fc/fs, btype='highpass', analog=False, output='ba')\n",
    "# cheby2\n",
    "# b,a = signal.cheby2(N=6, rs=70, Wn=fc/fs, btype='highpass', analog=False, output='ba')\n",
    "\n",
    "# 滤波\n",
    "# y = signal.filtfilt(b, a, x, axis=-1, padtype='odd', padlen=None, method='pad', irlen=None)\n",
    "\n",
    "w, h = signal.freqz(b, a)  # 根据系数计算滤波器的频率响应，w是角频率，h是频率响应\n",
    "plt.plot(0.5 * fs * w / np.pi, 20*np.log10(h))  # 0.5*fs*w/np.pi 为频率\n",
    "plt.title('Butterworth filter frequency response')\n",
    "plt.xlabel('Frequency [Hz]')\n",
    "plt.ylabel('Amplitude [dB]')\n",
    "plt.grid(which='both', axis='both')  # 显示网格\n",
    "# 画红色的垂直线，标记截止频率\n",
    "plt.axvline(fc, color='red')\n",
    "plt.xscale('log')  # x轴对数化\n",
    "plt.show()"
   ],
   "metadata": {
    "collapsed": false,
    "ExecuteTime": {
     "end_time": "2023-10-05T09:17:50.265293300Z",
     "start_time": "2023-10-05T09:17:49.965615200Z"
    }
   }
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "outputs": [],
   "source": [],
   "metadata": {
    "collapsed": false,
    "ExecuteTime": {
     "end_time": "2023-10-05T09:16:40.164640900Z",
     "start_time": "2023-10-05T09:16:40.142994300Z"
    }
   }
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 2
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython2",
   "version": "2.7.6"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 0
}
